package com.liuyz;

import java.math.BigDecimal;
import java.math.BigInteger;
import java.util.HashSet;

/**
 * @author <a href="mailto:liuyaozong@gtmap.cn">liuyaozong</a>
 * @version 1.0, 2023/1/17
 * @description
 */
public class Test {
    public static void main(String[] args) {
//        int i1 = 10;
//        int i2 = 010;
//        System.out.println(i1); // 10
//        System.out.println(i2); // 8

        /*

            2&3=?
            2正数：
            原码：00000000    00000000    00000000    00000010
            反码：00000000    00000000    00000000    00000010
            补码：00000000    00000000    00000000    00000010
             2正数：
            原码：00000000    00000000    00000000    00000011
            反码：00000000    00000000    00000000    00000011
            补码：00000000    00000000    00000000    00000011

            补码计算：
            00000000    00000000    00000000    00000010
            00000000    00000000    00000000    00000011
            00000000    00000000    00000000    00000010    补码
            00000000    00000000    00000000    00000010    原码
            2

         */
        System.out.println(2 & 3);

        /*

            ~-2=?
            原码
            10000000    00000000    00000000    00000010
            反码
            11111111    11111111    11111111    11111101
            补码
            11111111    11111111    11111111    11111110

            计算之后的补码
            00000000    00000000    00000000    00000001    补码
            00000000    00000000    00000000    00000001    原码
            1

         */
        System.out.println(~-2);

        /*

            1>>2=?
            00000000    00000000    00000000   00000000 01
            00000000    00000000    00000000   00000000
            0

            8>>1=?
            00000000    00000000    00000000   00001000
            00 00000000    00000000    00000000   0000100
            00000000    00000000    00000000    00000100 ->4

         */
        System.out.println(1 >> 2);
        System.out.println(8 >> 1);

        /*

            2<<3=?
            00000000    00000000    00000000   00000010
            00000    00000000    00000000   00000010000
            16

         */
        System.out.println(2 << 3);

        /*

            -8>>2=?
            原码
            10000000    00000000    00000000    00001000
            反码
            11111111    11111111    11111111    11110111
            补码
            11111111    11111111    11111111    11111110    计算结果

            反码
            11111111    11111111    11111111    11111101
            原码
            10000000    00000000    00000000    00000010    -2

         */
        System.out.println("-8>>2:" + (-8 >> 2));

        /*

            00000000
            0-1
            2-2
            4-3
            8-4
            16-5
            32-6
            64-7
            128-8

            -16>>>2=?
            10000000    00000000    00000000    00010000     -16
            反码
            11111111    11111111    11111111    11101111
            补码
            11111111    11111111    11111111    11110000     -16

            高位补0，补2位
            0011111111    11111111    11111111    111100    补码
            0011111111    11111111    11111111    111100    原码

            1,073,741,820
         */
        System.out.println(-16 >>> 2);

        BigInteger integer;
        BigDecimal bigDecimal;
        HashSet set = new HashSet();
        set.add(2); // java.util.HashMap.put
        System.out.println(2 ^ 0);
        /*

            (h = key.hashCode()) ^ (h >>> 16)
            h = key.hashCode()   2
            h >>> 16             0

            2^0
            00000010
            00000000
            00000010 = 2
         */

        /*

            15
            00000000    00000000    00000000    00001111
            2
            00000000    00000000    00000000    00000010

            15 & 2
            00000000    00000000    00000000    00000010    ->2

         */
        System.out.println(15 & 2);
    }
}
